﻿// Controllers/ReportsController.cs
using FuturesReportViewer.Data;
using FuturesReportViewer.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace FuturesReportViewer.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class ReportsController : ControllerBase
    {
        private readonly ReportDbContext _context;

        public ReportsController(ReportDbContext context)
        {
            _context = context;
        }

        // GET: api/reports
        // 获取用于侧边栏的报告列表，按品种分组（仅包含最近3天的数据）
        [HttpGet]
        public async Task<ActionResult<IEnumerable<ReportGroup>>> GetReportMenu()
        {
            // 1. 计算起始日期
            // "3天内" 通常指今天、昨天、前天。所以起始日期是2天前。
            // DateTime.Today 获取今天的日期（时间部分为 00:00:00）
            var startDate = DateTime.Today.AddDays(-2);

            // 2. 将起始日期格式化为 "yyyyMMdd" 字符串，以匹配数据库中的格式
            var startDateString = startDate.ToString("yyyyMMdd");

            var reportGroups = await _context.Reports
                .AsNoTracking()
                // 3. 在查询早期添加 Where 子句，以便在数据库层面进行过滤，效率更高
                // 由于 Date 字段是 "yyyyMMdd" 格式的字符串，可以直接进行字符串比较
                .Where(r => r.Date != null && r.Date.CompareTo(startDateString) >= 0)
                .Select(r => new { r.Name, r.Pzdm, r.Date })
                .GroupBy(r => r.Name ?? "未分类")
                .Select(g => new ReportGroup
                {
                    Name = g.Key,
                    Items = g.Select(i => new ReportDateItem { Pzdm = i.Pzdm, Date = i.Date })
                               .OrderByDescending(i => i.Date) // 按日期降序排列
                               .ToList()
                })
                .OrderBy(g => g.Name) // 按品种名称排序
                .ToListAsync();

            return Ok(reportGroups);
        }

        // GET: api/reports/{pzdm}/{date}
        // 获取指定报告的详细内容
        [HttpGet("{pzdm}/{date}")]
        public async Task<ActionResult<string>> GetReportContent(string pzdm, string date)
        {
            var report = await _context.Reports
                .AsNoTracking()
                .FirstOrDefaultAsync(r => r.Pzdm == pzdm && r.Date == date);

            if (report == null)
            {
                return NotFound("指定的报告不存在。");
            }

            return Ok(report.Content ?? string.Empty);
        }
    }
}